/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Distribuciones;

import entidad.FactoryDistribucion.DISTRIBUCION_NOMBRES;

/**
 *
 * @author USUARIO
 */
public class Binomial implements Distribucion{

    private int ensayos;
    private double probabilidadExito;
    public static final DISTRIBUCION_NOMBRES nombre = DISTRIBUCION_NOMBRES.BINOMIAL;
    public static final String[] parametros = {"ensayos","probabilidad de exito"};
    public static final String[] tipoParametros = {"int", "double"};

    public Binomial() {
    }

    public Binomial(int n, double p) {
        this.ensayos = n;
        this.probabilidadExito = p;
    }

    @Override
    public String[] getParametros() {
        return parametros;
    }

    @Override
    public String[] getTipoParametros() {
        return tipoParametros;
    }

    @Override
    public double generar (double u){
        int x = 0;
        double pr = Math.pow((1-probabilidadExito), ensayos);
        double Fx = pr;
        while (u > Fx) {
            x++;
            pr = pr*probabilidadExito/(1-probabilidadExito)*(ensayos-(x-1))/x;
            Fx += pr;
        }

        return x;
    }

    public int getEnsayos() {
        return ensayos;
    }

    public double getProbabilidadExito() {
        return probabilidadExito;
    }

    @Override
    public DISTRIBUCION_NOMBRES getNombre() {
        return nombre;
    }

    public void setEnsayos(int ensayos) {
        this.ensayos = ensayos;
    }

    public void setProbabilidadExito(double probabilidadExito) {
        this.probabilidadExito = probabilidadExito;
    }

    @Override
    public double calcularMedia() {
        return ensayos*probabilidadExito;
    }
    
}
